igc.o brauniger_iq.o shape.o hiketech.o glogbook.o coastexp.o \
vcf.o overlay.o kml.o google.o lowranceusr.o an1.o tomtom.o \
tef_xml.o maggeo.o pathaway.o vitosmt.o gdb.o bcr.o coto.o \
- ignrando.o
+ ignrando.o stmwpp.o
FILTERS=position.o duplicate.o arcdist.o polygon.o smplrout.o reverse_route.o sort.o stackfilter.o trackfilter.o discard.o
sort.o: sort.c defs.h queue.h gbtypes.h
stackfilter.o: stackfilter.c defs.h queue.h gbtypes.h
strptime.o: strptime.c strptime.h
+stmwpp.o: stmwpp.c defs.h queue.h gbtypes.h csv_util.h
tef_xml.o: tef_xml.c defs.h queue.h gbtypes.h xmlgeneric.h
text.o: text.c defs.h queue.h gbtypes.h jeeps/gpsmath.h jeeps/gps.h \
jeeps/../defs.h jeeps/gpsport.h jeeps/gpsserial.h jeeps/gpssend.h \
index - Use track number <index> from input data for output.
The range is 1 to number of tracks in input.
+
+ STMwpp
+
+ Support for Suunto Track Manager (STM) WaypointPlus format..
+ Simple structure with coordinates and timestamp. Route points
+ (waypoints) have additionaly shortname.
+ The files can only contain one route or one track.
+ http://www.suunto.fi
+
+ Options:
+
+ index - Use route/track number <index> from input data for output.
+
DATA FILTERS
GPSBabel supports data filtering. Data filters are invoked from
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<gpx
+ version="1.0"
+creator="GPSBabel - http://www.gpsbabel.org"
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xmlns="http://www.topografix.com/GPX/1/0"
+xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd">
+<time>1970-01-01T00:00:00Z</time>
+<bounds minlat="50.492618900" minlon ="12.105448700" maxlat="51.314520700" maxlon="12.435919300" />
+<wpt lat="50.492618900" lon="12.105448700">
+<time>2005-09-03T00:00:00Z</time>
+ <name>NARVA</name>
+ <cmt>NARVA</cmt>
+ <desc>NARVA</desc>
+</wpt>
+<wpt lat="50.493836900" lon="12.106101000">
+<time>2005-09-03T00:00:00Z</time>
+ <name>Liebknechtstras</name>
+ <cmt>Liebknechtstras</cmt>
+ <desc>Liebknechtstras</desc>
+</wpt>
+<wpt lat="50.493662800" lon="12.107152400">
+<time>2005-09-03T00:00:00Z</time>
+ <name>Jahnstrasse11</name>
+ <cmt>Jahnstrasse11</cmt>
+ <desc>Jahnstrasse11</desc>
+</wpt>
+<wpt lat="50.610795200" lon="12.173802200">
+<time>2005-09-03T00:00:00Z</time>
+ <name>Elsterberg</name>
+ <cmt>Elsterberg</cmt>
+ <desc>Elsterberg</desc>
+</wpt>
+<wpt lat="50.654763000" lon="12.204956700">
+<time>2005-09-03T00:00:00Z</time>
+ <name>Greiz</name>
+ <cmt>Greiz</cmt>
+ <desc>Greiz</desc>
+</wpt>
+<wpt lat="50.844125600" lon="12.408757200">
+<time>2005-09-03T00:00:00Z</time>
+ <name>Gosel</name>
+ <cmt>Gosel</cmt>
+ <desc>Gosel</desc>
+</wpt>
+<wpt lat="50.877340500" lon="12.433888700">
+<time>2005-09-03T00:00:00Z</time>
+ <name>3</name>
+ <cmt>3</cmt>
+ <desc>3</desc>
+</wpt>
+<wpt lat="50.964955100" lon="12.435919300">
+<time>2005-09-03T00:00:00Z</time>
+ <name>Altenburg-Umgehung</name>
+ <cmt>Altenburg-Umgehung</cmt>
+ <desc>Altenburg-Umgehung</desc>
+</wpt>
+<wpt lat="51.314520700" lon="12.409143300">
+<time>2005-09-03T00:00:00Z</time>
+ <name>Völkerschlachtdenkmal</name>
+ <cmt>Völkerschlachtdenkmal</cmt>
+ <desc>Völkerschlachtdenkmal</desc>
+</wpt>
+<rte>
+ <rtept lat="50.492618900" lon="12.105448700">
+<time>2005-09-03T00:00:00Z</time>
+ <name>NARVA</name>
+ </rtept>
+ <rtept lat="50.493836900" lon="12.106101000">
+<time>2005-09-03T00:00:00Z</time>
+ <name>Liebknechtstras</name>
+ </rtept>
+ <rtept lat="50.493662800" lon="12.107152400">
+<time>2005-09-03T00:00:00Z</time>
+ <name>Jahnstrasse11</name>
+ </rtept>
+ <rtept lat="50.610795200" lon="12.173802200">
+<time>2005-09-03T00:00:00Z</time>
+ <name>Elsterberg</name>
+ </rtept>
+ <rtept lat="50.654763000" lon="12.204956700">
+<time>2005-09-03T00:00:00Z</time>
+ <name>Greiz</name>
+ </rtept>
+ <rtept lat="50.844125600" lon="12.408757200">
+<time>2005-09-03T00:00:00Z</time>
+ <name>Gosel</name>
+ </rtept>
+ <rtept lat="50.877340500" lon="12.433888700">
+<time>2005-09-03T00:00:00Z</time>
+ <name>3</name>
+ </rtept>
+ <rtept lat="50.964955100" lon="12.435919300">
+<time>2005-09-03T00:00:00Z</time>
+ <name>Altenburg-Umgehung</name>
+ </rtept>
+ <rtept lat="51.314520700" lon="12.409143300">
+<time>2005-09-03T00:00:00Z</time>
+ <name>Völkerschlachtdenkmal</name>
+ </rtept>
+</rte>
+</gpx>
--- /dev/null
+Datum,WGS 84,WGS 84,0,0,0,0,0\r
+WP,D,NARVA,50.4926189,12.1054487,09/03/2005,00:00:00.90,\r
+WP,D,Liebknechtstras,50.4938369,12.106101,09/03/2005,00:00:00.90,\r
+WP,D,Jahnstrasse11,50.4936628,12.1071524,09/03/2005,00:00:00.90,\r
+WP,D,Elsterberg,50.6107952,12.1738022,09/03/2005,00:00:00.90,\r
+WP,D,Greiz,50.654763,12.2049567,09/03/2005,00:00:00.90,\r
+WP,D,Gosel,50.8441256,12.4087572,09/03/2005,00:00:00.90,\r
+WP,D,3,50.8773405,12.4338887,09/03/2005,00:00:00.90,\r
+WP,D,Altenburg-Umgehung,50.9649551,12.4359193,09/03/2005,00:00:00.90,\r
+WP,D,Völkerschlachtdenkmal,51.3145207,12.4091433,09/03/2005,00:00:00.90,\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<gpx
+ version="1.0"
+creator="GPSBabel - http://www.gpsbabel.org"
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xmlns="http://www.topografix.com/GPX/1/0"
+xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd">
+<time>1970-01-01T00:00:00Z</time>
+<trk>
+<trkseg>
+<trkpt lat="45.187113000" lon="4.660729700">
+<time>2005-08-23T15:25:12Z</time>
+</trkpt>
+<trkpt lat="45.186845500" lon="4.660163000">
+<time>2005-08-23T15:25:22Z</time>
+</trkpt>
+<trkpt lat="45.186395500" lon="4.659932400">
+<time>2005-08-23T15:25:39Z</time>
+</trkpt>
+<trkpt lat="45.185924600" lon="4.659882600">
+<time>2005-08-23T15:25:58Z</time>
+</trkpt>
+<trkpt lat="45.185478000" lon="4.659767600">
+<time>2005-08-23T15:26:16Z</time>
+</trkpt>
+<trkpt lat="45.185017800" lon="4.659738800">
+<time>2005-08-23T15:26:33Z</time>
+</trkpt>
+<trkpt lat="45.184579700" lon="4.659604400">
+<time>2005-08-23T15:26:53Z</time>
+</trkpt>
+<trkpt lat="45.184125400" lon="4.659626700">
+<time>2005-08-23T15:27:09Z</time>
+</trkpt>
+<trkpt lat="45.183667200" lon="4.659552100">
+<time>2005-08-23T15:27:28Z</time>
+</trkpt>
+<trkpt lat="45.183681400" lon="4.658898400">
+<time>2005-08-23T15:28:02Z</time>
+</trkpt>
+<trkpt lat="45.183994000" lon="4.658401600">
+<time>2005-08-23T15:28:15Z</time>
+</trkpt>
+<trkpt lat="45.184607600" lon="4.657295000">
+<time>2005-08-23T15:28:30Z</time>
+</trkpt>
+<trkpt lat="45.185006500" lon="4.655877600">
+<time>2005-08-23T15:28:44Z</time>
+</trkpt>
+<trkpt lat="45.184509400" lon="4.655268100">
+<time>2005-08-23T15:28:54Z</time>
+</trkpt>
+<trkpt lat="45.183927600" lon="4.654676700">
+<time>2005-08-23T15:29:04Z</time>
+</trkpt>
+<trkpt lat="45.183491900" lon="4.654383400">
+<time>2005-08-23T15:29:16Z</time>
+</trkpt>
+<trkpt lat="45.183500700" lon="4.653741400">
+<time>2005-08-23T15:29:26Z</time>
+</trkpt>
+<trkpt lat="45.183334800" lon="4.653151500">
+<time>2005-08-23T15:29:42Z</time>
+</trkpt>
+<trkpt lat="45.183066200" lon="4.652625200">
+<time>2005-08-23T15:29:59Z</time>
+</trkpt>
+<trkpt lat="45.183001700" lon="4.651983900">
+<time>2005-08-23T15:30:15Z</time>
+</trkpt>
+<trkpt lat="45.182989700" lon="4.651326900">
+<time>2005-08-23T15:30:32Z</time>
+</trkpt>
+<trkpt lat="45.182910100" lon="4.650682800">
+<time>2005-08-23T15:30:44Z</time>
+</trkpt>
+<trkpt lat="45.182539100" lon="4.650288200">
+<time>2005-08-23T15:30:56Z</time>
+</trkpt>
+<trkpt lat="45.182125900" lon="4.649993200">
+<time>2005-08-23T15:31:14Z</time>
+</trkpt>
+<trkpt lat="45.181794300" lon="4.649571300">
+<time>2005-08-23T15:31:31Z</time>
+</trkpt>
+<trkpt lat="45.181625100" lon="4.648974300">
+<time>2005-08-23T15:31:50Z</time>
+</trkpt>
+<trkpt lat="45.181511800" lon="4.648349300">
+<time>2005-08-23T15:32:13Z</time>
+</trkpt>
+<trkpt lat="45.181295700" lon="4.647775000">
+<time>2005-08-23T15:32:34Z</time>
+</trkpt>
+<trkpt lat="45.181057000" lon="4.647201200">
+<time>2005-08-23T15:32:56Z</time>
+</trkpt>
+<trkpt lat="45.180720100" lon="4.646757600">
+<time>2005-08-23T15:33:15Z</time>
+</trkpt>
+<trkpt lat="45.180433600" lon="4.646221300">
+<time>2005-08-23T15:33:32Z</time>
+</trkpt>
+<trkpt lat="45.180078000" lon="4.645822800">
+<time>2005-08-23T15:33:51Z</time>
+</trkpt>
+<trkpt lat="45.179698200" lon="4.645442700">
+<time>2005-08-23T15:34:09Z</time>
+</trkpt>
+<trkpt lat="45.179354500" lon="4.645033100">
+<time>2005-08-23T15:34:29Z</time>
+</trkpt>
+<trkpt lat="45.178831700" lon="4.644899000">
+<time>2005-08-23T15:34:50Z</time>
+</trkpt>
+<trkpt lat="45.178873700" lon="4.644249900">
+<time>2005-08-23T15:35:15Z</time>
+</trkpt>
+<trkpt lat="45.179131500" lon="4.643725300">
+<time>2005-08-23T15:35:33Z</time>
+</trkpt>
+<trkpt lat="45.179240000" lon="4.643110200">
+<time>2005-08-23T15:35:55Z</time>
+</trkpt>
+<trkpt lat="45.179606000" lon="4.642736400">
+<time>2005-08-23T15:36:16Z</time>
+</trkpt>
+<trkpt lat="45.179759300" lon="4.642141200">
+<time>2005-08-23T15:36:39Z</time>
+</trkpt>
+<trkpt lat="45.179895100" lon="4.641526300">
+<time>2005-08-23T15:37:03Z</time>
+</trkpt>
+<trkpt lat="45.179936600" lon="4.640884200">
+<time>2005-08-23T15:37:33Z</time>
+</trkpt>
+<trkpt lat="45.179692900" lon="4.640355500">
+<time>2005-08-23T15:38:06Z</time>
+</trkpt>
+<trkpt lat="45.179717200" lon="4.639714300">
+<time>2005-08-23T15:38:36Z</time>
+</trkpt>
+<trkpt lat="45.179532100" lon="4.639125700">
+<time>2005-08-23T15:39:06Z</time>
+</trkpt>
+<trkpt lat="45.179173000" lon="4.638733200">
+<time>2005-08-23T15:39:29Z</time>
+</trkpt>
+<trkpt lat="45.179017500" lon="4.638135800">
+<time>2005-08-23T15:39:51Z</time>
+</trkpt>
+<trkpt lat="45.178894700" lon="4.637525200">
+<time>2005-08-23T15:40:14Z</time>
+</trkpt>
+<trkpt lat="45.178674600" lon="4.636948900">
+<time>2005-08-23T15:40:34Z</time>
+</trkpt>
+<trkpt lat="45.178391800" lon="4.636434900">
+<time>2005-08-23T15:40:47Z</time>
+</trkpt>
+<trkpt lat="45.178171700" lon="4.635866200">
+<time>2005-08-23T15:40:59Z</time>
+</trkpt>
+<trkpt lat="45.177866400" lon="4.635158500">
+<time>2005-08-23T15:41:09Z</time>
+</trkpt>
+<trkpt lat="45.177499900" lon="4.634587200">
+<time>2005-08-23T15:41:19Z</time>
+</trkpt>
+</trkseg>
+</trk>
+</gpx>
--- /dev/null
+Datum,WGS 84,WGS 84,0,0,0,0,0
+TP,D,45.187113,4.6607297,08/23/2005,15:25:12.812,
+TP,D,45.1868455,4.660163,08/23/2005,15:25:22.822,
+TP,D,45.1863955,4.6599324,08/23/2005,15:25:39.839,
+TP,D,45.1859246,4.6598826,08/23/2005,15:25:58.858,
+TP,D,45.185478,4.6597676,08/23/2005,15:26:16.816,
+TP,D,45.1850178,4.6597388,08/23/2005,15:26:33.833,
+TP,D,45.1845797,4.6596044,08/23/2005,15:26:53.853,
+TP,D,45.1841254,4.6596267,08/23/2005,15:27:09.89,
+TP,D,45.1836672,4.6595521,08/23/2005,15:27:28.828,
+TP,D,45.1836814,4.6588984,08/23/2005,15:28:02.82,
+TP,D,45.183994,4.6584016,08/23/2005,15:28:15.815,
+TP,D,45.1846076,4.657295,08/23/2005,15:28:30.830,
+TP,D,45.1850065,4.6558776,08/23/2005,15:28:44.844,
+TP,D,45.1845094,4.6552681,08/23/2005,15:28:54.854,
+TP,D,45.1839276,4.6546767,08/23/2005,15:29:04.84,
+TP,D,45.1834919,4.6543834,08/23/2005,15:29:16.816,
+TP,D,45.1835007,4.6537414,08/23/2005,15:29:26.826,
+TP,D,45.1833348,4.6531515,08/23/2005,15:29:42.842,
+TP,D,45.1830662,4.6526252,08/23/2005,15:29:59.859,
+TP,D,45.1830017,4.6519839,08/23/2005,15:30:15.815,
+TP,D,45.1829897,4.6513269,08/23/2005,15:30:32.832,
+TP,D,45.1829101,4.6506828,08/23/2005,15:30:44.844,
+TP,D,45.1825391,4.6502882,08/23/2005,15:30:56.856,
+TP,D,45.1821259,4.6499932,08/23/2005,15:31:14.814,
+TP,D,45.1817943,4.6495713,08/23/2005,15:31:31.831,
+TP,D,45.1816251,4.6489743,08/23/2005,15:31:50.850,
+TP,D,45.1815118,4.6483493,08/23/2005,15:32:13.813,
+TP,D,45.1812957,4.647775,08/23/2005,15:32:34.834,
+TP,D,45.181057,4.6472012,08/23/2005,15:32:56.856,
+TP,D,45.1807201,4.6467576,08/23/2005,15:33:15.815,
+TP,D,45.1804336,4.6462213,08/23/2005,15:33:32.832,
+TP,D,45.180078,4.6458228,08/23/2005,15:33:51.851,
+TP,D,45.1796982,4.6454427,08/23/2005,15:34:09.89,
+TP,D,45.1793545,4.6450331,08/23/2005,15:34:29.829,
+TP,D,45.1788317,4.644899,08/23/2005,15:34:50.850,
+TP,D,45.1788737,4.6442499,08/23/2005,15:35:15.815,
+TP,D,45.1791315,4.6437253,08/23/2005,15:35:33.833,
+TP,D,45.17924,4.6431102,08/23/2005,15:35:55.855,
+TP,D,45.179606,4.6427364,08/23/2005,15:36:16.816,
+TP,D,45.1797593,4.6421412,08/23/2005,15:36:39.839,
+TP,D,45.1798951,4.6415263,08/23/2005,15:37:03.83,
+TP,D,45.1799366,4.6408842,08/23/2005,15:37:33.833,
+TP,D,45.1796929,4.6403555,08/23/2005,15:38:06.86,
+TP,D,45.1797172,4.6397143,08/23/2005,15:38:36.836,
+TP,D,45.1795321,4.6391257,08/23/2005,15:39:06.86,
+TP,D,45.179173,4.6387332,08/23/2005,15:39:29.829,
+TP,D,45.1790175,4.6381358,08/23/2005,15:39:51.851,
+TP,D,45.1788947,4.6375252,08/23/2005,15:40:14.814,
+TP,D,45.1786746,4.6369489,08/23/2005,15:40:34.834,
+TP,D,45.1783918,4.6364349,08/23/2005,15:40:47.847,
+TP,D,45.1781717,4.6358662,08/23/2005,15:40:59.859,
+TP,D,45.1778664,4.6351585,08/23/2005,15:41:09.89,
+TP,D,45.1774999,4.6345872,08/23/2005,15:41:19.819,
--- /dev/null
+ /*
+
+ Support for "Suunto Track Manager" (STM) WaypointPlus files,
+ see homepage "http://www.suunto.fi" for more details,
+
+ Copyright (C) 2005 Olaf Klein, o.b.klein@t-online.de
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
+*/
+
+#include "defs.h"
+#include "csv_util.h"
+#include <ctype.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+static FILE *fin;
+static FILE *fout;
+static route_head *track, *route;
+static waypoint *wpt;
+
+#define MYNAME "STMwpp"
+
+#define STM_NOTHING 0
+#define STM_WAYPT 1
+#define STM_TRKPT 2
+
+static int track_index;
+static int track_num;
+static int what;
+
+static char *index_opt = NULL;
+
+static
+arglist_t stmwpp_args[] =
+{
+ {"index", &index_opt, "Index of route/track to write (if more the one in source)", NULL, ARGTYPE_INT },
+ {0, 0, 0, 0, 0}
+};
+
+
+static void
+stmwpp_rd_init(const char *fname)
+{
+ fin = xfopen(fname, "r", MYNAME);
+ track = NULL;
+ route = NULL;
+ wpt = NULL;
+}
+
+static void
+stmwpp_rd_deinit(void)
+{
+ fclose(fin);
+}
+
+static void
+stmwpp_data_read(void)
+{
+ char buff[1024];
+ char *c;
+
+ what = STM_NOTHING;
+ fgets(buff, sizeof(buff), fin);
+
+ if (strncmp(buff, "Datum,WGS 84,WGS 84,", 20) != 0)
+ fatal(MYNAME ": Invalid GPS datum or not \"WaypointPlus\"\" file!\n");
+
+ while (fgets(buff, sizeof(buff), fin) != NULL)
+ {
+ char *c;
+ int column = -1;
+ struct tm time;
+
+ wpt = NULL;
+ memset(&time, 0, sizeof(time));
+
+ c = csv_lineparse(buff, ",", "", column++);
+ while (c != NULL)
+ {
+ int new_what;
+
+ switch(column)
+ {
+ case 0:
+ if (case_ignore_strcmp(c, "WP") == 0)
+ {
+ new_what = STM_WAYPT;
+ }
+ else if (case_ignore_strcmp(c, "TP") == 0)
+ {
+ new_what = STM_TRKPT;
+ }
+ else
+ fatal(MYNAME ": Unknown feature \"%s\"!\n", c);
+
+ if ((what != STM_NOTHING) && (new_what != what))
+ fatal(MYNAME ": Only one feature (route or track) is supported by STM!\n");
+
+ what = new_what;
+ wpt = waypt_new();
+ break;
+
+ case 1:
+ if (what == STM_TRKPT) column++; /* no name -> skip column two */
+ break;
+
+ case 2:
+ wpt->shortname = xstrdup(c);
+ break;
+
+ case 3:
+ wpt->latitude = atof(c);
+ break;
+
+ case 4:
+ wpt->longitude = atof(c);
+ break;
+
+ case 5:
+ sscanf(c, "%d/%d/%d", &time.tm_mon, &time.tm_mday, &time.tm_year);
+ break;
+
+ case 6:
+ sscanf(c, "%d:%d:%d.%d", &time.tm_hour, &time.tm_min, &time.tm_sec, &wpt->centiseconds);
+ if (what == STM_TRKPT)
+ wpt->centiseconds /= 10;
+ break;
+
+ default:
+ break;
+ }
+ c = csv_lineparse(NULL, ",", "", column++);
+ }
+ if (wpt != NULL)
+ {
+ time.tm_year -= 1900;
+ time.tm_mon--;
+ wpt->creation_time = mkgmtime(&time);
+
+ switch(what)
+ {
+ case STM_WAYPT:
+ waypt_add(waypt_dupe(wpt));
+ if (route == NULL)
+ {
+ route = route_head_alloc();
+ route_add_head(route);
+ }
+ route_add_wpt(route, wpt);
+ break;
+
+ case STM_TRKPT:
+ if (track == NULL)
+ {
+ track = route_head_alloc();
+ track_add_head(track);
+ }
+ route_add_wpt(track, wpt);
+ break;
+ }
+ wpt = NULL;
+ }
+ }
+}
+
+static void
+stmwpp_rw_init(const char *fname)
+{
+ fout = xfopen(fname, "w", MYNAME);
+}
+
+static void
+stmwpp_rw_deinit(void)
+{
+ fclose(fout);
+}
+
+static void
+stmwpp_track_hdr(const route_head *track)
+{
+ track_num++;
+}
+
+static void
+stmwpp_track_tlr(const route_head *track)
+{
+}
+
+static void
+stmwpp_write_double(const double val)
+{
+ char buff[64];
+ char *c;
+
+ c = buff + snprintf(buff, sizeof(buff), "%3.7f", val);
+ while (*--c == '0') *c = '\0';
+ if (*c == '.') *c = '0';
+ fprintf(fout, "%s,", buff);
+}
+
+static void
+stmwpp_waypt_cb(const waypoint *wpt)
+{
+ char cdate[16], ctime[16];
+ struct tm tm;
+
+ if (track_index != track_num) return;
+
+ tm = *gmtime(&wpt->creation_time);
+ tm.tm_year += 1900;
+ tm.tm_mon++;
+
+ snprintf(cdate, sizeof(cdate), "%02d/%02d/%04d", tm.tm_mon, tm.tm_mday, tm.tm_year);
+ snprintf(ctime, sizeof(ctime), "%02d:%02d:%02d", tm.tm_hour, tm.tm_min, tm.tm_sec);
+
+ switch(what)
+ {
+ case STM_WAYPT:
+ fprintf(fout, "WP,D,%s,", wpt->shortname);
+ break;
+
+ case STM_TRKPT:
+ fprintf(fout, "TP,D,");
+ break;
+ }
+ stmwpp_write_double(wpt->latitude);
+ stmwpp_write_double(wpt->longitude);
+ fprintf(fout, "%s,%s", cdate, ctime);
+ switch(what)
+ {
+ case STM_WAYPT:
+ fprintf(fout, ".%02d", wpt->centiseconds);
+ break;
+ case STM_TRKPT:
+ fprintf(fout, ".%03d", wpt->centiseconds * 10);
+ break;
+ }
+ fprintf(fout, ",\r\n");
+}
+
+static void
+stmwpp_data_write(void)
+{
+ track_num = 0;
+ if (index_opt != NULL)
+ track_index = atoi(index_opt);
+ else
+ track_index = 1;
+
+ fprintf(fout, "Datum,WGS 84,WGS 84,0,0,0,0,0\r\n");
+
+ switch(global_opts.objective)
+ {
+ case wptdata:
+ what = STM_WAYPT;
+ track_index = track_num;
+ waypt_disp_all(stmwpp_waypt_cb);
+ break;
+ case rtedata:
+ what = STM_WAYPT;
+ track_disp_all(stmwpp_track_hdr, stmwpp_track_tlr, stmwpp_waypt_cb);
+ break;
+ case trkdata:
+ what = STM_TRKPT;
+ track_disp_all(stmwpp_track_hdr, stmwpp_track_tlr, stmwpp_waypt_cb);
+ break;
+ }
+}
+
+ff_vecs_t stmwpp_vecs = {
+ ff_type_file,
+ FF_CAP_RW_ALL,
+ stmwpp_rd_init,
+ stmwpp_rw_init,
+ stmwpp_rd_deinit,
+ stmwpp_rw_deinit,
+ stmwpp_data_read,
+ stmwpp_data_write,
+ NULL,
+ stmwpp_args,
+ CET_CHARSET_MS_ANSI, 0
+};
${PNAME} -i ignrando -f ${TMPDIR}/ignrando-sample.rdn -o gpx -F ${TMPDIR}/ignrando-sample.gpx
compare ${TMPDIR}/ignrando-sample.gpx reference/track/ignrando-sample.gpx
+#
+# STMwpp "Suunto Track Manager" WaypointPlus format tests
+#
+rm -f ${TMPDIR}/stmwpp-*
+${PNAME} -i stmwpp -f reference/track/stmwpp-track.txt -o gpx -F ${TMPDIR}/stmwpp-track.gpx
+compare ${TMPDIR}/stmwpp-track.gpx reference/track/stmwpp-track.gpx
+${PNAME} -i stmwpp -f reference/route/stmwpp-route.txt -o gpx -F ${TMPDIR}/stmwpp-route.gpx
+compare ${TMPDIR}/stmwpp-route.gpx reference/route/stmwpp-route.gpx
+${PNAME} -i stmwpp -f reference/route/stmwpp-route.txt -o stmwpp -F ${TMPDIR}/stmwpp-route.txt
+compare ${TMPDIR}/stmwpp-route.txt reference/route/stmwpp-route.txt
+
exit 0
extern ff_vecs_t bcr_vecs;
extern ff_vecs_t coto_vecs;
extern ff_vecs_t ignr_vecs;
+extern ff_vecs_t stmwpp_vecs;
static
vecs_t vec_list[] = {
"ignrando",
"IGN Rando track files",
"rdn"
- },
+ },
+ {
+ &stmwpp_vecs,
+ "stmwpp",
+ "Suunto Track Manager (STM) WaypointPlus files",
+ "txt"
+ },
{
NULL,
NULL,